package aliyun

import (
	"fmt"
	"github.com/gylang/aliyun/webdav/aliyun/model/res"
	"strings"
	"sync"
)

var filePool sync.Map

func AddAllMapInFileCache(path string, store map[string]*res.TFile) {

	for k, v := range store {
		filePool.Store(path+k, v)
	}
}

func AddAllInFileCache(path string, store []*res.TFile) {

	for _, v := range store {
		filePool.Store(FileCacheKey(path, *v), v)
	}
}

func AddInFileCache(path string, store *res.TFile) {

	filePool.Store(FileCacheKey(path, *store), store)
}

func FileCacheKey(path string, store res.TFile) string {
	var key string
	if strings.HasSuffix(path, "/") {
		key = fmt.Sprintf("%s%s.%s", path, store.Name, store.Type)
	} else {
		key = fmt.Sprintf("%s/%s.%s", path, store.Name, store.Type)
	}
	return key
}

func GetFileFromFileCache(filePath string) *res.TFile {

	value, ok := filePool.Load(filePath)
	if ok {
		fileRes, ok := value.(*res.TFile)
		if ok {
			return fileRes
		}
		return nil
	}
	return nil
}
